// 加密工具
#ifndef ENCRYPTUTIL_H
#define ENCRYPTUTIL_H

#include <QObject>
#include <QString>
#include <QByteArray>
#include <QCryptographicHash>
#include <QMutex>

// 加密就基础是加盐hash
enum EncryptAlgorithm {
    AES_256,    // AES-256加密（用于词库文件）
    SHA_256     // SHA-256哈希（用于密钥生成和数据校验）
};

class EncryptUtil : public QObject
{
	Q_OBJECT
	Q_DISABLE_COPY_MOVE(EncryptUtil)  // 禁止拷贝移动，确保单例语义
	friend class UserDict;

public:
	explicit EncryptUtil(QObject *parent = nullptr);
	~EncryptUtil() override = default;

	// static func 加密tool
	static QByteArray generateKey(const QString &password = "");	// 生成加密密钥（基于用户配置和设备信息  从ConfigManager获取密码+设备标识）
	// 加密/解密字符串
	static QByteArray encryptString(const QString &text, const QByteArray &key);			// 字符串加密（返回：IV+密文，IV用于解密）
    static QString decryptString(const QByteArray &encryptedData, const QByteArray &key);	// 字符串解密（输入：IV+密文，返回明文）
	// data hash (校验)
	static QByteArray generateHash(const QByteArray &data, EncryptAlgorithm algo = SHA_256);

private:
	// AES补全处理
    static QByteArray addPkcs7Padding(const QByteArray &data, int blockSize);
    static QByteArray removePkcs7Padding(const QByteArray &data);

    // 静态密钥缓存
    static QByteArray s_globalKey;
	static const QByteArray FIXED_IV;       // 固定IV（需求2.2.2指定："1234567890abcdef"）

};

#endif	// ENCRYPTUTIL_H